Historically, computer systems have been designed around a central processing unit (CPU). Nearly all of the “intelligence” in the computer system was in the CPU, which was responsible not only for carrying out computation tasks, but for carrying out operating system (OS) functions, e.g., for scheduling OS tasks, and for input/output functions, e.g., for reading/writing data from/to disk drives, sending data to printers, etc. To this end, the CPU was designed with an emphasis on versatility and speed—so the CPU could carry out almost any task, and run fast enough that most of what it did appeared nearly instantaneous. The foregoing approach to computer system design, however, came at considerable expense in complexity and power consumption. For decades, neither the complexity nor the power consumption was given much consideration, because technological advances in integrated circuit fabrication techniques increased the number and speed of transistors available for a given price point. Although advances in integrated circuit fabrication continue, the degree of improvement over time has slowed substantially, especially with respect to clock speed. For decades, the limit on computer system performance has been imposed primarily by transistor fabrication technology.
More recently, however, the primary limit has been imposed by power consumption and dissipation. As such, the main challenge in designing a computer system is no longer to simply make it fast. The main challenge is making the computer system power efficient, to maximize the number of tasks that can be performed by the computer system using a given amount of power. A way to respond to this challenge is to off-load tasks from the CPU to more specialized hardware. One area that many conventional computer system designs have attempted to address is offloading input/output (I/O) tasks from the CPU. I/O tasks typically happen relatively slowly compared to the speed capability of the CPU, so when carried out by the CPU, the I/O tasks frequently have consumed a great deal of power to that could have instead be used for mission critical computations. To avoid that, many conventional computer systems have included various types of ancillary hardware to assist with I/O tasks, e.g., checking, formatting, framing and timing of incoming/outgoing streams of data, freeing the CPU to carry out other tasks.